<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1"><meta name="robots" content="noodp"/><title>半监督深度学习 | Yasin&#39;s Blog</title><meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image" content=""/>
<meta name="twitter:title" content="半监督深度学习"/>
<meta name="twitter:description" content=""/><meta name="twitter:creator" content="@wangyuexin8"/><meta name="Description" content="KEEP KWARKING"><meta property="og:title" content="半监督深度学习" />
<meta property="og:description" content="半监督学习 在有标签数据&#43;无标签数据混合成的训练数据中使用的机器学习算法。一般假设，无标签数据比有标签数据多，甚至多得多。 要求： 无标签数据一般" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://blog.aimoon.top/semisupervisedlearning/" /><meta property="og:image" content="https://blog.aimoon.top/images/favicon.svg"/><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2020-07-02T10:22:26&#43;08:00" />
<meta property="article:modified_time" content="2021-03-29T11:34:14&#43;08:00" /><meta property="og:site_name" content="Yasin&#39;s Blog" />

<meta name="application-name" content="YASIN">
<meta name="apple-mobile-web-app-title" content="YASIN"><meta name="theme-color" content="#ffffff"><meta name="msapplication-TileColor" content="#da532c"><link rel="icon" href="/images/favicon.svg" type="image/x-icon"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"><link rel="manifest" href="/site.webmanifest"><link rel="canonical" href="https://blog.aimoon.top/semisupervisedlearning/" /><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/normalize.css@8.0.1/normalize.min.css"><link rel="stylesheet" href="/css/style.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.7.2/animate.min.css"><script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "BlogPosting",
        "headline": "半监督深度学习",
        "inLanguage": "zh-CN",
        "mainEntityOfPage": {
            "@type": "WebPage",
            "@id": "https:\/\/blog.aimoon.top\/semisupervisedlearning\/"
        },"image": ["https:\/\/blog.aimoon.top\/images\/cover.png"],"genre": "posts","keywords": "半监督, 深度学习","wordCount":  2327 ,
        "url": "https:\/\/blog.aimoon.top\/semisupervisedlearning\/","datePublished": "2020-07-02T10:22:26+08:00","dateModified": "2021-03-29T11:34:14+08:00",
        "publisher": {
            "@type": "Person",
            "name": "Wang Yuexin", "image": [
            {
            "@type": "ImageObject",
            "url": "https:\/\/blog.aimoon.top\/images\/avatars.png"
            }
            ]},"author": {
                "@type": "Person",
                "name": "Wang Yuexin"
            },"description": ""
    }
    </script><script type="application/ld+json">
    {
        "@context": "https://schema.org",
        "@type": "BreadcrumbList",
        "itemListElement": [{
            "@type": "ListItem",
            "position": 1,
            "name": "主页",
            "item": "https:\/\/blog.aimoon.top"
        },{
            "@type": "ListItem",
            "position": 2,
            "name": "计算机视觉",
            "item": "https://blog.aimoon.top/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/"
        },{
                "@type": "ListItem",
                "position": 3,
                "name": "半监督深度学习"
            }]
    }
</script></head>
    <body data-header-desktop="auto" data-header-mobile="auto"><script>(window.localStorage && localStorage.getItem('theme') ? localStorage.getItem('theme') === 'dark' : ('light' === 'auto' ? window.matchMedia('(prefers-color-scheme: dark)').matches : 'light' === 'dark')) && document.body.setAttribute('theme', 'dark');</script>

        <div id="mask"></div><div class="wrapper"><header>
    <div class="desktop header" id="header-desktop">
        <div class="header-wrapper">
            <div class="header-title">
                <a href="/" title="Yasin&#39;s Blog" class="header-logo logo-svg">Yasin&#39;s Blog</a>
            </div>
            <div class="menu">
                <nav>
                    <h2 class="display-hidden">Основная навигация</h2>
                    <ul class="menu-inner"><li>
                            <a class="menu-item" href="/posts/"> 目录 </a>
                        </li><li>
                            <a class="menu-item" href="/tags/"> 标签 </a>
                        </li><li>
                            <a class="menu-item" href="/categories/"> 归档 </a>
                        </li><li>
                            <a class="menu-item" href="/comments/"> 留言 </a>
                        </li><li>
                            <a class="menu-item" href="https://aimoon.top" rel="noopener noreffer" target="_blank"> 主页 </a>
                        </li></ul>
                </nav><span class="menu-item delimiter"></span><span class="menu-item search" id="search-desktop">
                        <input type="text" placeholder="search……" id="search-input-desktop">
                        <a href="javascript:void(0);" class="search-button search-toggle" id="search-toggle-desktop" title="搜索">
                            <span class="svg-icon icon-search"></span>
                        </a>
                        <a href="javascript:void(0);" class="search-button search-clear" id="search-clear-desktop" title="清空">
                            <span class="svg-icon icon-cancel"></span>
                        </a>
                        <span class="search-button search-loading" id="search-loading-desktop">
                            <span class="svg-icon icon-loading"></span>
                        </span>
                    </span><a href="javascript:void(0);" class="menu-item theme-switch" title="切换主题">
                <span class="svg-icon icon-moon"></span>
                </a>
            </div>
        </div>
    </div><div class="mobile header" id="header-mobile">
        <div class="header-container">
            <div class="header-wrapper">
                <div class="header-title">
                    <a href="/" title="Yasin&#39;s Blog" class="header-logo">Yasin&#39;s Blog</a>
                </div>
                <div class="menu-toggle" id="menu-toggle-mobile">
                    <span></span><span></span><span></span>
                </div>
            </div>
            <div class="menu" id="menu-mobile"><div class="search-wrapper">
                        <div class="search mobile" id="search-mobile">
                            <input type="text" placeholder="search……" id="search-input-mobile">
                            <a href="javascript:void(0);" class="search-button search-toggle" id="search-toggle-mobile" title="搜索">
                                <span class="svg-icon icon-search"></span>
                            </a>
                            <a href="javascript:void(0);" class="search-button search-clear" id="search-clear-mobile" title="清空">
                                <span class="svg-icon icon-cancel"></span>
                            </a>
                            <span class="search-button search-loading" id="search-loading-mobile">
                                <span class="svg-icon icon-loading"></span>
                            </span>
                        </div>
                        <a href="javascript:void(0);" class="search-cancel" id="search-cancel-mobile">
                            取消
                        </a>
                    </div><nav>
                    <h2 class="display-hidden">Основная навигация</h2>
                    <ul><li>
                            <a class="menu-item" href="/posts/" title="">目录</a>
                        </li><li>
                            <a class="menu-item" href="/tags/" title="">标签</a>
                        </li><li>
                            <a class="menu-item" href="/categories/" title="">归档</a>
                        </li><li>
                            <a class="menu-item" href="/comments/" title="">留言</a>
                        </li><li>
                            <a class="menu-item" href="https://aimoon.top" title="" rel="noopener noreffer" target="_blank">主页</a>
                        </li></ul>
                </nav>
                <a href="javascript:void(0);" class="menu-item theme-switch" title="切换主题">
                    <span class="svg-icon icon-moon"></span>
                </a></div>
        </div>
    </div><div class="search-dropdown desktop">
    <div id="search-dropdown-desktop"></div>
</div>
<div class="search-dropdown mobile">
    <div id="search-dropdown-mobile"></div>
</div></header><main class="main">
<div class="container content-article page-toc theme-classic"><div class="toc" id="toc-auto">
            <div class="toc-title">目录</div>
            <div class="toc-content" id="toc-content-auto"></div>
        </div>
    

    
    
    <article>
    

        <header class="header-post">

            

            
            <div class="post-title">

                    <div class="post-all-meta">
                        <nav class="breadcrumbs">
    <ol>
        <li><a href="/">主页 </a></li><li><a href="/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/">计算机视觉 </a></li><li>半监督深度学习</li>
    </ol>
</nav>
                        <h1 class="single-title flipInX">半监督深度学习</h1><div class="post-meta summary-post-meta"><span class="post-category meta-item">
                                <a href="/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/"><span class="svg-icon icon-folder"></span>计算机视觉</a>
                            </span><span class="post-meta-date meta-item">
                                <span class="svg-icon icon-clock"></span><time class="timeago" datetime="2020-07-02">2020-07-02</time>
                            </span><span class="post-meta-words meta-item">
                                <span class="svg-icon icon-pencil"></span>约 2327 字
                            </span>
                            <span class="post-meta-reading meta-item">
                                <span class="svg-icon icon-stopwatch"></span>预计阅读 5 分钟
                            </span>
                        </div>

                    </div>

                </div>

                </header>

        <div class="article-post toc-start">

            <div class="content-block content-block-first content-block-position">

                <div class="post single"><div class="image-theme-classic">
                        <img src="https://gitee.com/xiaomoon/image/raw/master/img/20200702114454.png" style="width: 100%">
                    </div><div class="details toc" id="toc-static"  data-kept="">
                        <div class="details-summary toc-title">
                            <span>目录</span>
                        </div>
                        <div class="details-content toc-content" id="toc-content-static"><nav id="TableOfContents">
  <ul>
    <li><a href="#半监督学习">半监督学习</a></li>
    <li><a href="#半监督深度学习">半监督深度学习</a></li>
    <li><a href="#参考">参考</a></li>
  </ul>
</nav></div>
                    </div><h2 id="半监督学习" class="headerLink"><a href="#%e5%8d%8a%e7%9b%91%e7%9d%a3%e5%ad%a6%e4%b9%a0" class="header-mark"></a>半监督学习</h2><ul>
<li>
<p>在有标签数据+无标签数据<strong>混合</strong>成的训练数据中使用的机器学习算法。一般假设，无标签数据比有标签数据多，甚至多得多。</p>
</li>
<li>
<p><strong>要求</strong>：</p>
<ul>
<li>无标签数据一般是有标签数据中的某一个类别的（不要不属于的，也不要属于多个类别的）；</li>
<li>有标签数据的标签应该都是对的；</li>
<li>无标签数据一般是类别平衡的（即每一类的样本数差不多）；</li>
<li>无标签数据的分布应该和有标签的相同或类似 。</li>
</ul>
</li>
<li>
<p><strong>半监督学习算法</strong></p>
<ul>
<li>
<p><strong>简单自训练（simple self-training）</strong>：用有标签数据训练一个分类器，然后用这个分类器对无标签数据进行分类，这样就会产生伪标签（pseudo label）或软标签（soft label），挑选认为分类正确的无标签样本（此处应该有一个<strong>挑选准则</strong>），把选出来的无标签样本用来训练分类器</p>
<p>




<figure class="render-image"><a target="_blank" href="https://gitee.com/xiaomoon/image/raw/master/img/1479233-20180920221248528-1319232835.png" title=" " >
        <img loading="lazy" decoding="async"
             class="render-image"
             src="https://gitee.com/xiaomoon/image/raw/master/img/1479233-20180920221248528-1319232835.png"
            alt=" "
        />
    </a><figcaption class="image-caption"> </figcaption>
</figure></p>
</li>
<li>
<p><strong>协同训练（co-training）</strong>：是 self-training 的一种，但其思想是好的。假设每个数据可以从不同的角度（view）进行分类，不同角度可以训练出不同的分类器，然后用这些从不同角度训练出来的分类器对无标签样本进行分类，再选出认为可信的无标签样本加入训练集中。由于这些分类器从不同角度训练出来的，可以形成一种互补，而提高分类精度；就如同从不同角度可以更好地理解事物一样。</p>
</li>
<li>
<p><strong>半监督字典学习</strong>：是 self-training 的一种，先是用有标签数据作为字典，对无标签数据进行分类，挑选出认为分类正确的无标签样本，加入字典中（此时的字典就变成了半监督字典了）</p>
</li>
<li>
<p><strong>标签传播算法（Label Propagation Algorithm）</strong>：是一种基于图的半监督算法，通过构造图结构（数据点为顶点，点之间的相似性为边）来寻找<strong>训练数据</strong>中有标签数据和无标签数据的关系。只是训练数据中，这是一种直推式的半监督算法，即只对训练集中的无标签数据进行分类，这其实感觉很像一个有监督分类算法&hellip;，但其实并不是，因为其标签传播的过程，会流经无标签数据，即有些无标签数据的标签的信息，是从另一些无标签数据中流过来的，这就用到了无标签数据之间的联系</p>
</li>
<li>
<p><strong>半监督支持向量机</strong>：监督支持向量机是利用了结构风险最小化来分类的，半监督支持向量机还用上了无标签数据的空间分布信息，即决策超平面应该与无标签数据的分布一致（应该经过无标签数据密度低的地方）（<strong>这其实是一种假设</strong>，不满足的话这种无标签数据的空间分布信息会误导决策超平面，导致性能比只用有标签数据时还差）</p>
</li>
</ul>
</li>
<li>
<p><strong>半监督学习分类</strong></p>
<ul>
<li><strong>纯（pure）半监督学习</strong>：假定训练数据中的未标记样本并非待测的数据</li>
<li><strong>直推学习</strong>：假定学习过程中所考虑的未标记样本恰是待预测数据，学习的目的就是在这些未标记样本上获得最优泛化性能</li>
</ul>
<p>




<figure class="render-image"><a target="_blank" href="https://gitee.com/xiaomoon/image/raw/master/img/1479233-20180920213147835-6619680.png" title=" " >
        <img loading="lazy" decoding="async"
             class="render-image"
             src="https://gitee.com/xiaomoon/image/raw/master/img/1479233-20180920213147835-6619680.png"
            alt=" "
        />
    </a><figcaption class="image-caption"> </figcaption>
</figure></p>
</li>
</ul>
<h2 id="半监督深度学习" class="headerLink"><a href="#%e5%8d%8a%e7%9b%91%e7%9d%a3%e6%b7%b1%e5%ba%a6%e5%ad%a6%e4%b9%a0" class="header-mark"></a>半监督深度学习</h2><ul>
<li>
<p>半监督深度学习<strong>算法</strong>：</p>
<ul>
<li>无标签数据预训练网络后有标签数据微调（fine-tune）；</li>
<li>有标签数据训练网络，利用从网络中得到的深度特征来做半监督算法；</li>
<li>让网络 work in semi-supervised fashion。</li>
</ul>
</li>
<li>
<p>对于神经网络来说，一个好的初始化可以使得结果更稳定，迭代次数更少。目前我见过的初始化方式有两种：</p>
<ul>
<li><strong>无监督预训练</strong>：用所有训练数据训练自动编码器（<a href="https://blog.csdn.net/sinat_27935693/article/details/53502656" target="_blank" rel="noopener noreffer">AutoEncoder</a>），然后把自编码网络的参数作为初始参数，用有标签数据微调网络（验证集）。</li>
<li><strong>伪有监督预训练</strong>：通过半监督算法或聚类算法等方式，给无标签数据附上伪标签信息，先用这些伪标签信息来预训练网络，然后再用有标签数据来微调网络（验证集）。</li>
</ul>
</li>
<li>
<p><strong>有标签数据提取特征</strong>的半监督学习</p>
</li>
</ul>
<ol>
<li>先用有标签数据训练网络（此时网络一般过拟合&hellip;）</li>
<li>通过隐藏层提取特征，以这些特征来用某种分类算法对无标签数据进行分类</li>
<li>挑选认为分类正确的无标签数据加入到训练集</li>
<li>重复上述过程</li>
</ol>
<ul>
<li>
<p>网络本身的半监督学习（<strong>端到端的半监督深度模型</strong>）</p>
<ul>
<li>
<p>ICML 2013 的文章<a href="http://pdfs.semanticscholar.org/798d/9840d2439a0e5d47bcf5d164aa46d5e7dc26.pdf" target="_blank" rel="noopener noreffer">Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks</a>：该文章简单的说就是在伪标签学习中使用深度学习网络作为分类器，就是把网络对无标签数据的预测，作为无签数据的伪标签（Pseudo label），用来对网络进行训练。方法虽然简单，但是效果很好，比单纯用有标签数据有不少的提升</p>
</li>
<li>
<p>其主要的贡献在于损失函数的构造：</p>
<p>$$L=\sum_{m=1}^n\sum_{i=1}^C L(y_i^m, f_i^m)+\alpha(t)\sum_{m=1}^{n^\prime}\sum_{i=1}^CL({y^\prime}_i^m, {f^\prime}_i^m)$$</p>
<blockquote>
<p>损失函数的第一项是有标签数据的损失，第二项是无标签数据的损失
在无标签数据的损失中， $y'$为无标签数据预测得到的伪标签，是直接取网络对无标签数据的预测的最大值为标签。
其中 $\alpha (t)$决定着无标签数据的代价在网络更新的作用，选择合适的 $\alpha (t)$ 很重要，太大性能退化，太小提升有限。
在网络初始时，网络的预测时不太准确的，因此生成的伪标签的准确性也不高。
在初始训练时， $\alpha (t)$ 要设为 0，然后再慢慢增加，论文中给出其增长函数。</p>
</blockquote>
</li>
<li>
<p><a href="http://www.jiqizhixin.com/wp-content/uploads/2015/11/2.-Semi-Supervised-Learning-with-Ladder-Network-.pdf" target="_blank" rel="noopener noreffer">Semi-Supervised Learning with Ladder Networks</a>：</p>
<p>ladderNet 是有监督算法和无监督算法的有机结合。前面提及到的无监督预训练+有监督微调的思想中所有监督和无监督是分开的，两个阶段的训练相互独立，并不能称之为真正的半监督学习。</p>
<p>无监督学习是用重构样本进行训练，其编码（学习特征）的目的是尽可能地保留原始数据的信息；而有监督学习是用于分类，希望只保留其本质特征，去除不必要的特征。</p>
<blockquote>
<p>举例来说：分类任务判断一张人脸图片是单眼皮，还是双眼皮；那么有监督学习经过训练完毕后，就会尽可能的把与这个分类任务无关的信息过滤掉，过滤的越好，那么分类的精度将会更高。
比如一个人的嘴巴、鼻子信息这些都是与这个分类任务无关的，那么就要尽量的过滤掉，因此，基于这个原因以至于一直以来有监督学习和无监督学习不能很好的兼容在一起。
ladderNet 成功的原因在于损失函数和 skip connection 。通过在每层的编码器和解码器之间添加跳跃连接（skip connection），减轻模型较高层表示细节的压力，使得无监督学习和有监督学习能结合在一起，并在最高层添加分类器。
$$Cost=-\sum_{n=1}^NlogP(\hat{y}(n)=y^*(n)\mid x(n))+\sum_{n=N+1}^M\lambda_l ReconsructionCost({z^{(l)}}_{(n)},{\hat{z}^{(l)}}_{(n)})$$
损失函数的第一项是有标签样本数据的交叉熵损失函数，第二项是无监督各层噪声解码器重构误差欧式损失函数</p>
</blockquote>
</li>
</ul>
</li>
</ul>
<h2 id="参考" class="headerLink"><a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li>
<p><a href="https://www.cnblogs.com/kamekin/p/9683162.html" target="_blank" rel="noopener noreffer">半监督学习</a></p>
</li>
<li>
<p><a href="https://zhuanlan.zhihu.com/p/33196506" target="_blank" rel="noopener noreffer">半监督深度学习小结</a></p>
</li>
<li>
<p><a href="http://pdfs.semanticscholar.org/798d/9840d2439a0e5d47bcf5d164aa46d5e7dc26.pdf" target="_blank" rel="noopener noreffer">Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks</a></p>
</li>
<li>
<p><a href="http://www.jiqizhixin.com/wp-content/uploads/2015/11/2.-Semi-Supervised-Learning-with-Ladder-Network-.pdf" target="_blank" rel="noopener noreffer">Semi-Supervised Learning with Ladder Networks</a></p>
</li>
</ul>
</div><footer>
                        <div class="post">


<div class="post-share"><div class="share-link">
        <a class="share-icon share-twitter" href="javascript:void(0);" title="分享到 Twitter" data-sharer="twitter" data-url="https://blog.aimoon.top/semisupervisedlearning/" data-title="半监督深度学习" data-via="wangyuexin8" data-hashtags="半监督,深度学习"><span class="svg-social-icon icon-twitter"></span></a>
    </div><div class="share-link">
        <a class="share-icon share-facebook" href="javascript:void(0);" title="分享到 Facebook" data-sharer="facebook" data-url="https://blog.aimoon.top/semisupervisedlearning/" data-hashtag="半监督"><span class="svg-social-icon icon-facebook"></span></a>
    </div><div class="share-link">
        <a class="share-icon share-whatsapp" href="javascript:void(0);" title="分享到 WhatsApp" data-sharer="whatsapp" data-url="https://blog.aimoon.top/semisupervisedlearning/" data-title="半监督深度学习" data-web><span class="svg-social-icon icon-whatsapp"></span></a>
    </div><div class="share-link">
        <a class="share-icon share-blogger" href="javascript:void(0);" title="分享到 Blogger" data-sharer="blogger" data-url="https://blog.aimoon.top/semisupervisedlearning/" data-title="半监督深度学习" data-description=""><span class="svg-social-icon icon-blogger"></span></a>
    </div></div>

<div class="footer-post-author">
    <div class="author-avatar"><a href="https://aimoon.top" target="_blank"><img alt="Undergraduate Student of Artificial Intelligence 😜" src="https://blog.aimoon.top/images/avatars.png"></a></div>
    <div class="author-info">
        <div class="name"><a href="https://aimoon.top" target="_blank">Wang Yuexin</a></div>
        <div class="number-posts">Undergraduate Student of Artificial Intelligence 😜</span></div>
    </div>
</div><div class="post-tags"><a href="/tags/%E5%8D%8A%E7%9B%91%E7%9D%A3/" class="tag">半监督</a><a href="/tags/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/" class="tag">深度学习</a></div></div>
                </footer></div>
        <div id="toc-final"></div>
        </div>

    
    </article>
    <section class="page single comments content-block-position">
        <h1 class="display-hidden">Комментарии</h1><div id="comments"><div id="disqus_thread" class="comment" style="padding-top: 1.5rem"></div>
            <noscript>
                Please enable JavaScript to view the comments powered by <a href="https://disqus.com/?ref_noscript">Disqus</a>.
            </noscript></div></section></div>

</main><footer class="footer">
        <div class="footer-container"><div class="footer-line"><div><span id="timeDate">正在烧脑计算建站时间...</span><span id="times"></span><script>var now = new Date();function createtime(){var grt= new Date("05/20/2020 00:00:00");now.setTime(now.getTime()+250);days = (now - grt ) / 1000 / 60 / 60 / 24;dnum = Math.floor(days);hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum);hnum = Math.floor(hours);if(String(hnum).length ==1 ){hnum = "0" + hnum; }minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);mnum = Math.floor(minutes);if(String(mnum).length ==1 ){mnum = "0" + mnum;}seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);snum = Math.round(seconds);if(String(snum).length ==1 ){snum = "0" + snum;}document.getElementById("timeDate").innerHTML = "&nbsp"+dnum+"&nbsp天";document.getElementById("times").innerHTML = hnum + "&nbsp小时&nbsp" + mnum + "&nbsp分&nbsp" + snum + "&nbsp秒";}setInterval("createtime()",250);</script></div></div><div class="footer-line"><i class="svg-icon icon-copyright"></i><span>2020 - 2021</span><span class="author">&nbsp;<a href="https://aimoon.top" target="_blank">Yasin</a></span>&nbsp;|&nbsp;<span class="license"><a rel="license external nofollow noopener noreffer" href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank">CC BY-NC 4.0</a></span><span class="icp-splitter">&nbsp;|&nbsp;</span><br class="icp-br"/>
                    <span class="icp"><a href="https://blog.pangao.vip/icp/xmoon.info">🧑ICP证000000号</a></span></div>
        </div>
    </footer></div>

        <aside id="fixed-buttons"><a href="#" id="back-to-top" class="fixed-button" title="回到顶部">
                <i class="svg-icon icon-arrow-up"></i>
            </a><a href="#" id="view-comments" class="fixed-button" title="查看评论">
                <i class="svg-icon icon-comments-fixed"></i>
            </a>
        </aside><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/copy-tex.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/cookieconsent@3.1.1/build/cookieconsent.min.css"><script src="https://yasin5.disqus.com/embed.js" defer></script><script src="https://cdn.jsdelivr.net/npm/smooth-scroll@16.1.3/dist/smooth-scroll.min.js"></script><script src="https://cdn.jsdelivr.net/npm/autocomplete.js@0.37.1/dist/autocomplete.min.js"></script><script src="https://cdn.jsdelivr.net/npm/lunr@2.3.8/lunr.min.js"></script><script src="/lib/lunr/lunr.stemmer.support.min.js"></script><script src="/lib/lunr/lunr.zh.min.js"></script><script src="https://cdn.jsdelivr.net/npm/twemoji@13.0.0/dist/twemoji.min.js"></script><script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.6/dist/clipboard.min.js"></script><script src="https://cdn.jsdelivr.net/npm/sharer.js@0.4.0/sharer.min.js"></script><script src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js"></script><script src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js"></script><script src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/copy-tex.min.js"></script><script src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/mhchem.min.js"></script><script src="https://cdn.jsdelivr.net/npm/cookieconsent@3.1.1/build/cookieconsent.min.js"></script><script>window.config={"code":{"copyTitle":"复制到剪贴板","maxShownLines":10},"comment":{},"cookieconsent":{"content":{"dismiss":"同意","link":"了解更多","message":"本网站使用 Cookies 来改善您的浏览体验."},"enable":true,"palette":{"button":{"background":"#f0f0f0"},"popup":{"background":"#1aa3ff"}},"theme":"edgeless"},"math":{"delimiters":[{"display":true,"left":"$$","right":"$$"},{"display":true,"left":"\\[","right":"\\]"},{"display":false,"left":"$","right":"$"},{"display":false,"left":"\\(","right":"\\)"}],"strict":false},"search":{"highlightTag":"em","lunrIndexURL":"/index.json","lunrLanguageCode":"zh","lunrSegmentitURL":"/lib/lunr/lunr.segmentit.js","maxResultLength":10,"noResultsFound":"没有找到结果","snippetLength":30,"type":"lunr"},"twemoji":true};</script><script src="/js/theme.min.js"></script><script>
                (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
                m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
                })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

	        ga('create', 'UA-167439955-2', 'auto');
	        ga('set', 'anonymizeIp', true);
	        ga('send', 'pageview');
	    </script></body>
</html>
